package com.yu.xcx.controller;


import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.StrUtil;
import com.yu.xcx.dto.Result;
import com.yu.xcx.entity.Shop;
import com.yu.xcx.service.impl.ShopServiceImpl;
import com.yu.xcx.util.SystemConstants;
import javafx.application.Application;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.system.ApplicationHome;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Slf4j
@RestController
@RequestMapping("/upload")
public class UploadController {
    @Autowired
    private ShopServiceImpl shopService;

//    //上传图片
//    @PostMapping("shop")
//    public Result uploadImage(@RequestParam("file")MultipartFile image){
//        if(image.isEmpty()){
//            return Result.fail("图片上传失败");
//        }
//        try {
//            //获取原始文件名称
//            String originalFileName = image.getOriginalFilename();
//            //调用获取新文件名的方法
//            String path = createNewFileName(originalFileName);
//            //上传文件
//            image.transferTo(new File(path));
//            //返回上传结果
//            log.debug("文件上传成功,{}", path);
//            return Result.ok(path);
//        }catch (IOException e){
//            throw new RuntimeException("文件上传失败", e);
//        }
//    }




    //上传图片
    @PostMapping("/shop")
    public Result uploadImage(@RequestPart("file")MultipartFile image){
        if(image.isEmpty()){
            return Result.fail("图片上传失败");
        }
        try {
            Shop shop = new Shop();
            //获取原始文件名称
            String originalFileName = image.getOriginalFilename();
            //调用获取新文件名的方法
            List<String> strs = createNewFileName(originalFileName);
            String fileName = strs.get(0);
            String path = strs.get(1);
            //上传文件
            image.transferTo(new File(path));
            
            //返回上传结果
            log.debug("文件上传成功,{}", path);
            String url = "http://www.yyyul1an.cn:80/shop/" + fileName;

            return Result.ok(url);
        }catch (IOException e){
            throw new RuntimeException("文件上传失败", e);
        }
    }


    //删除文件
    @GetMapping("/shop/delete")
    public Result deleteBlogImg(@RequestParam("name") String fileName){
        File file = new File(SystemConstants.IMAGE_UPLOAD_DIR, fileName);
        if (file.isDirectory()){
            return Result.fail("错误的文件名称");
        }
        FileUtil.del(file);
        return Result.ok();
    }


    //创建新的文件名
    private List<String> createNewFileName(String originalFileName) {
        List<String> strs = new ArrayList<>();
        // 生成新文件名
        //获取后缀
        String suffix = StrUtil.subAfter(originalFileName, ".", true);
        //使用UUID随机产生一个图片名避免重复
        String uuid = UUID.randomUUID().toString().replace("-","");
        //拼接成文件名
        String fileName = uuid + "." +suffix;
        //上传图片
        ApplicationHome applicationHome = new ApplicationHome(this.getClass());
        //jar包运行的getDir()，为jar包的同级目录
        //即将图片存至jar包同级目录下的 images目录中
        String pre = applicationHome.getDir() + "/images/shop/";
        //拼接得到绝对路径
        String path = pre + fileName;
        strs.add(fileName);
        strs.add(path);

        return strs;
    }
}
